﻿package fwk.utiles
{
    //definition des packages nécessaires
    import flash.display.Sprite;
	import flash.events.EventDispatcher;
    import flash.events.TimerEvent;
    import flash.text.*;
    import flash.utils.Timer;
	import flash.display.MovieClip;

    //Déclaration de la classe
    public class Decompte extends EventDispatcher
    {
        //définition des variables
        public var dateRef:Date;//date de référence du compte à rebours
        public var maintenant:Date;//instant présent (peut etre n'importe quelle date)
        public var dateRefMilSec:Number;//date de ref convertie en millisecondes
        public var maintenantMilSec:Number;//présent converti en millisecondes
        
        public var diffSecondes:Number;//secondes restantes
        public var diffMinutes:Number;//minutes restantes
        public var diffHeures:Number;//heures restantes
        public var diffJours:Number;//jours restant
		
		private var _minuteur:Timer;
        
        //fonction constructrice
        public function Decompte(tmpdate:Date)
        {
			dateRef = tmpdate;
			maintenant = new Date();
			
            _minuteur = new Timer(1000);//creation d'un objet Timer de 1 seconde
            
            //écouteur d'évènement pour mise à jour des données chaque seconde
            _minuteur.addEventListener(TimerEvent.TIMER, calcDiffTime);//appelle fonction calcul différence de temps
        }
        
		
        //minuteur
        public function startTimer():void
        {

            calcDiffTime();
            _minuteur.start();//démarage du minuteur
        }
		
		public function stopTimer() {
			
			_minuteur.stop();
		}
        
        //fonction de calcul et de convertion du temps restant
        function calcDiffTime(evt:TimerEvent = null):void
        {
            
            convMilSec();//que l'on converti en millisecondes
            
            diffSecondes = Math.floor((dateRefMilSec - maintenantMilSec)/1000);// calcul des secondes restantes
			
			if ( diffSecondes < 0) {
				diffMinutes = Math.round(diffSecondes/60);//calcul des minutes restantes
				diffHeures = Math.round(diffMinutes/60);//calcul des heures restantes
				diffJours = Math.round(diffHeures/24);//calcul des jours restants
			}else {
				diffMinutes = Math.floor(diffSecondes/60);//calcul des minutes restantes
				diffHeures = Math.floor(diffMinutes/60);//calcul des heures restantes
				diffJours = Math.floor(diffHeures/24);//calcul des jours restants
			}

            
            //formatage des données : 1 min = 60 sec, etc...
            while (diffMinutes>=60)
            {
                diffMinutes = diffMinutes-60;
            }
            while (diffHeures>=24)
            {
                diffHeures = diffHeures-24;
            }
            while (diffSecondes>=60)
            {
                diffSecondes = diffSecondes-60;
            }
            
            debugApp();//fonction trace pour débogage de l'application
			
			dispatchEvent(new TimerEvent(TimerEvent.TIMER));
            
        }
        
        
        //conversion en millisecondes
        function convMilSec():void
        {
			maintenant = new Date( maintenant.getTime() + 1000 );
            maintenantMilSec = maintenant.getTime();
            dateRefMilSec = dateRef.getTime();
        }
        

        //debogage
        function debugApp():void
        {
            //trace("Ouverture du site dans :  " + diffJours + " jour(s), " + diffHeures + " heure(s), " + diffMinutes + " minute(s) et " + diffSecondes + " seconde(s) ");
        }
        
    }
}